package com.aos.erp.manager.service.sys;

import com.aos.erp.manager.model.sys.Department;
import com.aos.erp.manager.model.sys.vo.MenuTree;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;
import java.util.Map;

public interface DepartmentService {
    /**
     * 新增部门---分所
     *
     * @param divisionCode
     * @param name
     * @param appCode      应用code
     * @throws Exception
     */
    void addBeanDivision(String divisionCode, String name, String appCode) throws Exception;

    /**
     * 新增部门---总校
     *
     * @param divisionCode
     * @param schoolCode
     * @param name
     * @param appCode      应用code
     * @throws Exception
     */
    Long addBeanSchool(String divisionCode, String schoolCode, String name, String appCode) throws Exception;

    /**
     * 新增部门---分校/报名点
     *
     * @param parentSchoolCode 父级驾校组织code
     * @param schoolCode       驾校组织code
     * @param name             驾校/报名点名称
     * @param depType          部门类型[F:分校;B:报名点]
     * @param appCode          应用code
     * @throws Exception
     */
    Long addBeanSchoolBranch(String parentSchoolCode, String schoolCode, String name, String depType, String appCode) throws Exception;

    /**
     * 新增部门---部门
     *
     * @param depCode 父级组织code
     * @param name    名称
     * @param appCode 应用code
     */
    String addBeanDepartment(String depCode, String name, String appCode) throws Exception;

    /**
     * 根据部门ID批量删除部门
     *
     * @param depId
     * @param appCode 应用code
     * @return
     * @throws Exception
     */
    int isDel(String depId, String appCode) throws Exception;

    /**
     * 根据部门code批量删除部门
     *
     * @param depCode
     * @return
     * @throws Exception
     */
    int isDelByDepCode(String depCode) throws Exception;

    /**
     * 根据部门ID修改部门
     *
     * @param depId   部门ID
     * @param name    部门名称
     * @param appCode 应用appCode
     * @return
     * @throws Exception
     */
    int updateObject(String depId, String name, String appCode) throws Exception;

    /**
     * 根据部门code查询
     *
     * @param depCode
     * @return
     * @throws Exception
     */
    Department findByDepCode(String depCode) throws Exception;

    /**
     * "获取分所组织code
     *
     * @param code 分所代码
     * @return
     */
    String getDepCodeDivision(String code) throws Exception;

    /**
     * 获取总校组织code
     *
     * @param divisionCode 分所组织code
     * @return
     */
    String getDepCodeSchool(String divisionCode) throws Exception;

    /**
     * 获取分校/报名点组织code
     *
     * @param schoolCode 总校组织code、分校组织code
     * @param depType    部门类型[F:分校;B:报名点]
     * @return
     * @throws Exception
     */
    String getDepCodeBranch(String schoolCode, String depType) throws Exception;

    /**
     * 获取组织树
     *
     * @param params
     * @return
     * @throws Exception
     */
    List<MenuTree> selectTree(Map<String, Object> params) throws Exception;

    /**
     * 根据部门类型进行信息
     *
     * @param depType
     * @return
     */
    List<Department> selectByParams(String depType);

    /**
     * 根据部门类型进行分页
     *
     * @param pageIndex
     * @param pageSize
     * @param depCode    部门组织code
     * @param depName    部门名称
     * @param depType    部门类型
     * @param parentCode 部门父级code
     * @return
     */
    IPage<Department> queryByPage(Integer pageIndex, Integer pageSize, String depCode, String depName, String depType, String parentCode);

    /**
     * 同步根据当前用户机构code查角色信息
     *
     * @param currentUserId 当前登录用户id
     * @return
     */
    Object queryByOrganizationCode(String currentUserId) throws Exception;

    /**
     * 同步根据机构code查角色信息
     * @param organizationCode  机构code
     * @return
     * @throws Exception
     */
    Object queryRoleByOrganizationCode(String organizationCode) throws Exception;
}
